package com.ruoyi.door.service;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.door.domain.proxy.DoorPlanProxy;
import com.ruoyi.door.domain.DoorPlan;
import com.easy.query.api.proxy.entity.select.EntityQueryable;
import com.easy.query.core.api.pagination.EasyPageResult;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.easy.query.api.proxy.client.EasyEntityQuery;
/**
 * 【请填写功能名称】Service业务层处理
 *
 * @author ruoyi
 * @date 2025-07-02
 */
@Service
public class DoorPlanService
{
    @Autowired
    private EasyEntityQuery easyEntityQuery;

    /**
     * 查询【请填写功能名称】
     *
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    public DoorPlan selectDoorPlanById(Long id)
    {
        return easyEntityQuery.queryable(DoorPlan.class).where(x -> x.id().eq(id))
            .firstOrNull();
    }

    /**
     * 查询【请填写功能名称】列表
     *
     * @param doorPlan 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    public List<DoorPlan> selectDoorPlanList(DoorPlan doorPlan)
    {
        EasyPageResult<DoorPlan> pageResult = buildQuery(doorPlan)
            .toPageResult(TableSupport.buildPageRequest().getPageNum(),
                    TableSupport.buildPageRequest().getPageSize());
        return pageResult.getData();
    }

    private  EntityQueryable<DoorPlanProxy, DoorPlan> buildQuery(DoorPlan doorPlan){
        EntityQueryable<DoorPlanProxy, DoorPlan> queryable = easyEntityQuery.queryable(DoorPlan.class)
        .where(x -> {
                    if(doorPlan.getId() != null){
                        x.id().eq(doorPlan.getId());
                    }
                    if(StringUtils.isNotBlank(doorPlan.getName())){
                        x.name().like(doorPlan.getName());
                    }
                    if(StringUtils.isNotBlank(doorPlan.getTag1())){
                        x.tag1().eq(doorPlan.getTag1());
                    }
                    if(StringUtils.isNotBlank(doorPlan.getTag2())){
                        x.tag2().eq(doorPlan.getTag2());
                    }
                    if(StringUtils.isNotBlank(doorPlan.getDesc1())){
                        x.desc1().eq(doorPlan.getDesc1());
                    }
                    if(StringUtils.isNotBlank(doorPlan.getDesc2())){
                        x.desc2().eq(doorPlan.getDesc2());
                    }
                    if(doorPlan.getNum() != null){
                        x.num().eq(doorPlan.getNum());
                    }
                    if(doorPlan.getPrice() != null){
                        x.price().eq(doorPlan.getPrice());
                    }
        })
                .orderBy(x -> x.id().desc());
        return queryable;
    }

    /**
     * 新增【请填写功能名称】
     *
     * @param doorPlan 【请填写功能名称】
     * @return 结果
     */
    public long insertDoorPlan(DoorPlan doorPlan)
    {
            return easyEntityQuery.insertable(doorPlan).executeRows();
    }

    /**
     * 修改【请填写功能名称】
     *
     * @param doorPlan 【请填写功能名称】
     * @return 结果
     */
    public long updateDoorPlan(DoorPlan doorPlan)
    {
        return easyEntityQuery.updatable(doorPlan).executeRows();
    }

    /**
     * 批量删除【请填写功能名称】
     *
     * @param ids 需要删除的【请填写功能名称】主键
     * @return 结果
     */
    public long deleteDoorPlanByIds(Long[] ids)
    {
        return  easyEntityQuery.deletable(DoorPlan.class)
                .disableLogicDelete()//禁用逻辑删除,使用物理删除
            .allowDeleteStatement(true)//如果不允
            .where(x -> x.id().in(ids))
                .executeRows();
    }

    /**
     * 删除【请填写功能名称】信息
     *
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    public long deleteDoorPlanById(Long id)
    {
        return easyEntityQuery.deletable(DoorPlan.class)
                .disableLogicDelete()//禁用逻辑删除,使用物理删除
            .allowDeleteStatement(true)//如果不允
            .where(x -> x.id().eq(id))
                .executeRows();

    }

}